Senvion M92: Monte Carlo Simulation

Kelmarsh Wind Farm - 12.3 MW

Author

Jorge A. Thomas

Published

April 10, 2025

── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.0.4     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Attaching package: 'plotly'


The following object is masked from 'package:ggplot2':

    last_plot


The following object is masked from 'package:stats':

    filter


The following object is masked from 'package:graphics':

    layout



Attaching package: 'arrow'


The following object is masked from 'package:plotly':

    schema


The following object is masked from 'package:lubridate':

    duration


The following object is masked from 'package:utils':

    timestamp


here() starts at D:/Repositories/forecasting-wind-power
Rows: 42
Columns: 12
$ Year              <int> 2016, 2016, 2016, 2016, 2016, 2016, 2017, 2017, 2017…
$ Turbine           <chr> "T01", "T02", "T03", "T04", "T05", "T06", "T01", "T0…
$ `Time to Failure` <dbl> 7951.522, 8136.616, 7965.134, 7907.137, 7775.079, 77…
$ MTTF              <dbl> 248.4851, 156.4734, 265.5045, 439.2854, 457.3576, 26…
$ `Forced Outages`  <int> 32, 53, 30, 18, 17, 29, 24, 17, 9, 21, 14, 37, 12, 1…
$ TTR               <dbl> 501.010556, 153.184167, 178.918889, 41.895833, 441.7…
$ MTTR              <dbl> 15.6565799, 2.8902673, 5.9639630, 2.3275463, 25.9828…
$ Monthly_Outages   <large_list<integer>> <3, 1, 9, 7, 1, 1, 0, 0, 2, 2, 3, 3>…
$ `Failure Rate`    <dbl> 0.003785849, 0.006270312, 0.003549233, 0.002129540, …
$ FOR               <dbl> 0.0592734275, 0.0181363022, 0.0219692686, 0.00527055…
$ Availability      <dbl> 0.9407266, 0.9818637, 0.9780307, 0.9947294, 0.946243…
$ icon              <chr> "wind-turbine-icon-10.jpg", "wind-turbine-icon-10.jp…

Check Homogeneity

To determine whether the failure rates of the six turbines can be grouped together and represent the reliability of one turbine model, you can analyze the data statistically. Here are some steps you can follow:

  1. Check Homogeneity Verify whether the failure rates are consistent across all six turbines. This can be done using statistical tests to assess variance, such as:

ANOVA (Analysis of Variance): If the failure rates are continuous and you want to check whether they are significantly different between turbines.

Levene’s Test or Bartlett’s Test: To specifically assess equality of variances.

  1. Calculate Summary Statistics Compute measures such as the mean, median, standard deviation, and confidence intervals for failure rates. If these statistics indicate similar central tendencies and spread across turbines, it supports the idea of grouping them.

  2. Analyze Patterns Plot the data (e.g., using a box plot or scatter plot) to visually inspect whether the failure rates have similar distributions across turbines.

  3. Cluster Analysis (if needed) If you suspect outliers or sub-groups within the turbines, use clustering techniques to see if the turbines naturally fall into distinct groups based on their failure rates.

  4. Perform a Reliability Analysis Assuming homogeneity is confirmed, you can pool the failure rates and conduct reliability analysis:

Estimate the reliability metrics, such as Mean Time Between Failures (MTBF) or probability of failure within a given timeframe.

Fit statistical models such as Weibull or exponential distributions if the failure rates follow a specific trend.

  1. Investigate External Factors Ensure there aren’t external influences (e.g., installation conditions, maintenance practices, or environmental factors) causing differences among turbines. Such confounding factors could invalidate grouping the turbines as representative of the same reliability.

            Df    Sum Sq   Mean Sq F value Pr(>F)
Turbine      5 1.575e-05 3.151e-06   1.269  0.298
Residuals   36 8.936e-05 2.482e-06               
            Df    Sum Sq   Mean Sq F value Pr(>F)
Year         1 1.000e-08 6.100e-09   0.002  0.962
Residuals   40 1.051e-04 2.628e-06               

References

Iannone, Richard, and Michael Chow. n.d. great-tables: Make awesome display tables using Python. https://github.com/posit-dev/great-tables.
Mühleisen, Hannes, Mark Raasveldt, et al. 2025. “DuckDB: An Embeddable Analytical Database.” https://duckdb.org.
Plumley, Charlie. 2022. “Kelmarsh Wind Farm Data (0.1.0) [Data Set].” Zenodo. https://zenodo.org/records/8252025.
Vink, Ritchie, and contributors. 2025. “Polars: Fast Multi-Threaded DataFrame Library in Rust and Python.” https://www.pola.rs/.